Next: Multiple Queries, Previous: Completion, Up: Minibuffers [Contents][Index]
This section describes functions used to ask the user a
yes-or-no question. The function y-or-n-p can be
answered with a single character; it is useful for questions
where an inadvertent wrong answer will not have serious
consequences. yes-or-no-p is suitable for more
momentous questions, since it requires three or four characters
to answer.
If either of these functions is called in a command that was
invoked using the mouse—more precisely, if
last-nonmenu-event (see Command Loop Info)
is either nil or a list—then it uses a dialog
box or pop-up menu to ask the question. Otherwise, it uses
keyboard input. You can force use either of the mouse or of
keyboard input by binding last-nonmenu-event to a
suitable value around the call.
Strictly speaking, yes-or-no-p uses the
minibuffer and y-or-n-p does not; but it seems best
to describe them together.
This function asks the user a question, expecting input in
the echo area. It returns t if the user types
y, nil if the user types
n. This function also accepts SPC to mean yes and DEL to
mean no. It accepts C-] to quit, like
C-g, because the question might look like a
minibuffer and for that reason the user might try to use
C-] to get out. The answer is a single character,
with no RET needed to terminate it.
Upper and lower case are equivalent.
“Asking the question” means printing prompt in the echo area, followed by the string ‘(y or n) ’ . If the input is not one of the expected answers (y, n, SPC, DEL, or something that quits), the function responds ‘Please answer y or n.’, and repeats the request.
This function does not actually use the minibuffer, since it does not allow editing of the answer. It actually uses the echo area (see The Echo Area), which uses the same screen space as the minibuffer. The cursor moves to the echo area while the question is being asked.
The answers and their meanings, even
‘y’ and
‘n’, are not hardwired, and are
specified by the keymap query-replace-map (see
Search
and Replace). In particular, if the user enters the
special responses recenter,
scroll-up, scroll-down,
scroll-other-window, or
scroll-other-window-down (respectively bound to
C-l, C-v, M-v,
C-M-v and C-M-S-v in
query-replace-map), this function performs the
specified window recentering or scrolling operation, and
poses the question again.
We show successive lines of echo area messages, but only one actually appears on the screen at a time.
Like y-or-n-p, except that if the user fails
to answer within seconds seconds, this function
stops waiting and returns default. It works by
setting up a timer; see Timers. The argument
seconds should be a number.
This function asks the user a question, expecting input in
the minibuffer. It returns t if the user enters
‘yes’, nil if the user
types ‘no’. The user must type
RET to finalize the response. Upper and
lower case are equivalent.
yes-or-no-p starts by displaying
prompt in the echo area, followed by
‘(yes or no) ’
. The user must type one of the expected
responses; otherwise, the function responds
‘Please answer yes or no.’, waits
about two seconds and repeats the request.
yes-or-no-p requires more work from the user
than y-or-n-p and is appropriate for more
crucial decisions.
Here is an example:
(yes-or-no-p "Do you really want to remove everything? ") ;; After evaluation of the preceding expression, ;; the following prompt appears, ;; with an empty minibuffer:
---------- Buffer: minibuffer ---------- Do you really want to remove everything? (yes or no) ---------- Buffer: minibuffer ----------
If the user first types y RET, which is invalid because this function demands the entire word ‘yes’, it responds by displaying these prompts, with a brief pause between them:
---------- Buffer: minibuffer ---------- Please answer yes or no. Do you really want to remove everything? (yes or no) ---------- Buffer: minibuffer ----------
Next: Multiple Queries, Previous: Completion, Up: Minibuffers [Contents][Index]